package games.freecell.structure;

import commomgame.Card;
import commomgame.Region;
import commomgame.SubRegion;
import commongame.core.RegionOfReserves;
import games.freecell.core.RulesOfReserves;
import java.util.List;

/**
 * @author João
 * @author ian
 */
public class RegionOfReservesFreeCell extends RegionOfReserves {

    public RegionOfReservesFreeCell(int numberOfSubRegions) {
        super(numberOfSubRegions);
        super.rulesOfMovement = new RulesOfReserves();
        super.setNameOfSubRegions();
    }

    /**
     * Método invocado quando usuário movimenta cartas entre Fileiras
     *
     * @param value Representa o valor da carta escolhida pelo usuário para movimentação
     * @param nipe Representa o nipe da carta escolhida pelo usuário para movimentação
     * @param subRegionOrigin Representa a região de origem da carta
     * @param subRegionTarget Representa a região de destino da carta: região de reservas
     * @return permissão de movimentação da carta
     */
    public boolean verifyRuleRegionToRegion(int value, String nipe, SubRegion subRegionOrigin, SubRegion subRegionTarget, RegionOfCells regionOfCells) {

        //int sizeOfslice = subRegionOrigin.getSize();
        //System.out.println(sizeOfslice);
        
        if (regionOfCells.getNumOfEmptySubregions(regionOfCells) >= subRegionOrigin.returnPositionOfCard(subRegionOrigin.selectCard(value, nipe))) {
            //return rulesOfMovement.verifyMovement(value, nipe, subRegionOrigin, subRegionTarget);
            if (rulesOfMovement.verifyMovement(value, nipe, subRegionOrigin, subRegionTarget)) {
                subRegionTarget.addCardsAfterMovement(subRegionOrigin.selectCard(value, nipe), subRegionOrigin);
                subRegionOrigin.removeCard(subRegionOrigin.selectCard(value, nipe));
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    @Override
    public void sendCardsToRegion2(int numberOfCards, List<Card> partOfDeck) {
        int ponteiro = 0;
        
        for (int i = 0; i < getNumberOfSubRegions(); i++) {
            if (i < 4) {
                for (int j = 0; j < 7; j++) {
                    partOfDeck.get(ponteiro).setIsShowed(true);
                    this.getRegion().get(i).addCardInSubRegion(partOfDeck.get(ponteiro));
                    ponteiro++;
                }
            } else {
                for (int j = 0; j < 6; j++) {
                    partOfDeck.get(ponteiro).setIsShowed(true);
                    this.getRegion().get(i).addCardInSubRegion(partOfDeck.get(ponteiro));
                    ponteiro++;
                }
            }
        }
    }
}
